// JSZ测试文件 - 演示各种语法特性

// 变量声明
let 姓名 = "张三";
const 年龄 = 25;
var 城市 = "北京";

// 函数定义
function 问候(名字) {
    return "你好，" + 名字 + "！";
}

// 箭头函数
const 加法 = (a, b) => {
    return a + b;
};

// 条件语句
if (年龄 >= 18) {
    console.log("成年人");
} else {
    console.log("未成年人");
}

// 开关语句
switch (城市) {
    case "北京":
        console.log("首都");
        break;
    case "上海":
        console.log("魔都");
        break;
    default:
        console.log("其他城市");
}

// 循环语句
for (let i = 0; i < 5; i++) {
    if (i === 2) {
        continue;
    }
    console.log("数字:", i);
}

// for-of循环
const 数组 = [1, 2, 3, 4, 5];
for (const 项目 of 数组) {
    console.log("项目:", 项目);
}

// while循环
let 计数器 = 0;
while (计数器 < 3) {
    console.log("计数器:", 计数器);
    计数器++;
}

// 类定义
class 人 {
    constructor(姓名, 年龄) {
        this.姓名 = 姓名;
        this.年龄 = 年龄;
    }
    
    问候() {
        return `你好，我是${this.姓名}，今年${this.年龄}岁`;
    }
    
    static 创建成年人(姓名) {
        return new 人(姓名, 18);
    }
}

// 继承
class 学生 extends 人 {
    constructor(姓名, 年龄, 学校) {
        super(姓名, 年龄);
        this.学校 = 学校;
    }
    
    介绍() {
        return super.问候() + `，在${this.学校}上学`;
    }
}

// 异常处理
function 除法(a, b) {
    try {
        if (b === 0) {
            throw new Error("除数不能为零");
        }
        return a / b;
    } catch (错误) {
        console.error("计算错误:", 错误.message);
        return null;
    } finally {
        console.log("除法运算完成");
    }
}

// 异步函数
async function 获取数据(url) {
    try {
        const 响应 = await fetch(url);
        const 数据 = await 响应.json();
        return 数据;
    } catch (错误) {
        console.error("获取数据失败:", 错误);
        throw 错误;
    }
}

// 生成器函数
function* 数字生成器() {
    let i = 0;
    while (true) {
        yield i++;
    }
}

// 对象操作
const 用户 = {
    姓名: "李四",
    年龄: 30
};

// 检查类型
if (typeof 用户.姓名 === "string") {
    console.log("姓名是字符串");
}

// 检查实例
const 学生实例 = new 学生("王五", 20, "清华大学");
if (学生实例 instanceof 人) {
    console.log("学生是人的实例");
}

// 删除属性
delete 用户.年龄;

// 模块导出（注释形式，因为这是测试文件）
// 导出 { 人, 学生, 问候, 加法 };
// 导出 默认 人;

// 使用内置值
const 布尔值 = true;
const 空值 = null;
const 未定义值 = undefined;
const 无穷值 = Infinity;
const 非数字值 = NaN;

// 调试
debugger;

console.log("JSZ测试完成！");